import { ElMessage } from "element-plus"

/**
 * 动态设置页签标题
 *
 * @param to
 */
export const updatePageTitle = (to) => {
    // 获取当前路由的 meta.title
    const pageTitle = to.meta.title

    // 设置默认标题
    const defaultTitle = 'YuKi'

    // 如果有 meta.title，则拼接；否则使用默认标题
    if (pageTitle) {
        document.title = `${pageTitle} - ${defaultTitle}`
    } else {
        document.title = defaultTitle
    }
}

/**
 * 判断 token 是否过期（仅适用于 JWT）
 *
 * @param token
 * @returns {boolean}
 */
function isTokenExpired(token) {
    if (!token) return true

    try {
        const payload = JSON.parse(atob(token.split('.')[1]))
        return payload.exp * 1000 < Date.now()
    } catch (e) {
        console.error('Failed to parse token:', e)
        return true // 解析失败也认为 token 无效
    }
}

/**
 * 验证登录状态
 *
 * @param to
 * @param from
 * @param next
 * @returns {*}
 */
export const checkAuth = (to, from, next) => {
    const token = localStorage.getItem('token')

    // 先处理访问登录页的情况
    if (to.path === '/login') {
        if (token) {
            ElMessage.error('请勿重复登录')
            return next('/')
        }
        // 没有 token，允许访问登录页
        return next()
    }

    // 以下是非登录页的处理逻辑

    if (!token) {
        ElMessage.error('请先登录')
        return next('/login')
    }

    if (isTokenExpired(token)) {
        localStorage.removeItem('token')
        ElMessage.error('登录已过期，请重新登录')
        return next('/login')
    }

    // 所有检查通过，允许访问目标路由
    next()
}